//
// Copyright (C) 2024 Kumo inc.
// Author: Jeff.li lijippy@163.com
// All rights reserved.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
//

#include <hadarservice/engine.h>
#include <hadarservice/service.h>
#include <turbo/log/logging.h>

namespace hadarservice {

    void ServiceImpl::hk2s(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done)  {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().hk2s(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }

  void ServiceImpl::hk2t(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().hk2t(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
  void ServiceImpl::jp2t(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().jp2t(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
  void ServiceImpl::s2hk(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().s2hk(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
  void ServiceImpl::s2t(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().s2t(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
  void ServiceImpl::s2tw(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().s2tw(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
  void ServiceImpl::s2twp(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().s2twp(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
  void ServiceImpl::t2hk(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().t2hk(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
  void ServiceImpl::t2jp(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().t2jp(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
  void ServiceImpl::t2s(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().t2s(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
  void ServiceImpl::t2tw(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().t2tw(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
  void ServiceImpl::tw2s(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().tw2s(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
  void ServiceImpl::tw2sp(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().tw2sp(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
  void ServiceImpl::tw2t(::google::protobuf::RpcController* controller,
                        const ::hadar_service::HadarRequest* request,
                        ::hadar_service::HadarResponse* response,
                        ::google::protobuf::Closure* done) {
        krpc::ClosureGuard done_guard(done);
        auto r = ConvertEngine::instance().tw2t(request->message());
        if (r.ok()) {
            response->set_code(static_cast<int32_t>(turbo::StatusCode::kOk));
            response->set_message(r.value());
        } else {
            response->set_code(static_cast<int32_t>(r.status().code()));
        }
    }
}  // namespace hadarservice
